#pragma once
#include "noncopyable.h"
#include "InetAddress.h"
#include "Socket.h"
#include "Channel.h"
#include <functional>
class EventLoop;


class Acceptor:noncopyable
{
public:
    using NewConnectionCallback=function<void(int sockfd,const InetAddress&)>;

    Acceptor(EventLoop* loop,const InetAddress& listenAddr,bool reuseport);
    ~Acceptor();

    void setNewConnectionCallback(const NewConnectionCallback& cb){newConnectionCallback_=cb;}

    bool listenning() const{return listenning_;}
    void listen();

private:
    void handleRead();
    EventLoop* loop_;//main Loop
    Socket acceptSocket_; 
    Channel acceptChannel_;
    NewConnectionCallback newConnectionCallback_;
    bool listenning_;
    
};